#!/usr/bin/env python
# -*- coding:UTF-8 -*-
"""
singleton_meta.py
使用元类实现单例模式代码原型
"""

import threading  # 导入线程模块

class SingletonMeta(type):  # 单例模式元类

    _instance_lock = threading.Lock()  # 用于线程锁定

    def __call__(cls):  # 内部实例
        if not hasattr(cls, "_instance"):   # 如果类型没有改属性
            with cls._instance_lock:        # 锁定线程(语句结束会自动释放线程)
                if not hasattr(cls, "_instance"):  # 如果类型没有改属性就进行实例化
                    cls._instance = super(SingletonMeta, cls).__call__()  
        return cls._instance  # 返回对象实例

class Singleton(metaclass=SingletonMeta): pass  # 继承元类的单例模式
